Golang : Test floating point numbers not-a-number and infinite example
A simple example to demonstrate how to create not-a-number
and infinite
floating-point values in Golang. Will show some example tests on the values and things to watch out for in order to get the most accurate result.
Here you go!
package main
import (
"fmt"
"math"
)
func main() {
fnum := float64(12.2)
fmt.Println(fnum)
fmt.Println("Is not-a-number ? : ", math.IsNaN(fnum))
fNaN := math.NaN()
fmt.Println(fNaN)
fmt.Println("Is not-a-number ? : ", math.IsNaN(fNaN))
// test if floating-point value is infinity
fmt.Println("Is positive infinity? : ", math.IsInf(fNaN, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(fNaN, -1))
fmt.Println("Is either infinity? : ", math.IsInf(fNaN, 0))
// reference https://golang.org/pkg/math/#IsInf
fmt.Println("---------------------------------------------")
fmt.Println("Test positive infinite value")
fmt.Println("---------------------------------------------")
posInf := math.Inf(1)
posInf = posInf + 12.2 // infinite value will still propagate after add operation
fmt.Println("Symbol : ", posInf)
fmt.Println("Is positive infinity? : ", math.IsInf(posInf, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(posInf, -1))
fmt.Println("Is either infinity? : ", math.IsInf(posInf, 0))
fmt.Println("---------------------------------------------")
fmt.Println("Watch out for operation such as 10 / posInf !!")
fmt.Println("---------------------------------------------")
posInf = 10 / posInf // HOWEVER! this will screw up the infinite
fmt.Println("Symbol : ", posInf)
fmt.Println("Is positive infinity? : ", math.IsInf(posInf, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(posInf, -1))
fmt.Println("Is either infinity? : ", math.IsInf(posInf, 0))
fmt.Println("---------------------------------------------")
fmt.Println("Test negative infinite value")
fmt.Println("---------------------------------------------")
negInf := math.Inf(-1)
fmt.Println("Symbol : ", negInf)
fmt.Println("Is postive infinity? : ", math.IsInf(negInf, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(negInf, -1))
fmt.Println("Is either infinity? : ", math.IsInf(negInf, 0))
fmt.Println("---------------------------------------------")
fmt.Println("Watch out for operation such as infinite / infinite !!")
fmt.Println("---------------------------------------------")
negInf = negInf / negInf // --- WILL turn infinite into NaN
fmt.Println("Symbol : ", negInf)
fmt.Println("Is postive infinity? : ", math.IsInf(negInf, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(negInf, -1))
fmt.Println("Is either infinity? : ", math.IsInf(negInf, 0))
}
Output:
12.2
Is not-a-number ? : false
NaN
Is not-a-number ? : true
Is positive infinity? : false
Is negative infinity? : false
Is either infinity? : false
---------------------------------------------
Test positive infinite value
---------------------------------------------
Symbol : +Inf
Is positive infinity? : true
Is negative infinity? : false
Is either infinity? : true
---------------------------------------------
Watch out for operation such as 10 / posInf !!
---------------------------------------------
Symbol : 0
Is positive infinity? : false
Is negative infinity? : false
Is either infinity? : false
---------------------------------------------
Test negative infinite value
---------------------------------------------
Symbol : -Inf
Is postive infinity? : false
Is negative infinity? : true
Is either infinity? : true
---------------------------------------------
Watch out for operation such as infinite / infinite !!
---------------------------------------------
Symbol : NaN
Is postive infinity? : false
Is negative infinity? : false
Is either infinity? : false
Happy coding!
Reference:
See also : Golang : Accurate and reliable decimal calculations
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+17.3k Golang : Parse date string and convert to dd-mm-yyyy format
+9.9k Golang : How to tokenize source code with text/scanner package?
+18.9k Golang : Get host name or domain name from IP address
+11.5k Golang : Verify Linux user password again before executing a program example
+35k Golang : Integer is between a range
+24.9k Golang : Convert long hexadecimal with strconv.ParseUint example
+11.9k Golang : Split strings into command line arguments
+16.7k Golang : How to save log messages to file?
+4.4k Mac OSX : Get disk partitions' size, type and name
+7.3k Golang : Command line ticker to show work in progress
+18.9k Golang : Check if directory exist and create if does not exist
+4.5k Facebook : How to place save to Facebook button on your website